/***
 * 根据图幅号获得左上、右下点坐标，格式为"EPSG:3857“
 * @param sheet
 * @param scale
 * @returns {ol.Coordinate[]}
 * @constructor
 */
function Sheet2Num(sheet, scale) {
    var point1;
    var point2;
    var XX = sheet.split("-");
    switch (scale) {
        case 100:
            point1 = [(XX[1] - 31) * lnglat_100[0], XX[0] * lnglat_100[1]];
            point2 = [point1[0] + lnglat_100[0], point1[1] - lnglat_100[1]];
            break;
        case 50:
            var xy = XX[2].replace("A", 0).replace("B", 1).replace("C", 2).replace("D", 3);
            var m = Math.floor(xy / 2);
            var n = xy % 2;
            point1 = [(XX[1] - 31) * lnglat_100[0] + n * lnglat_50[0], XX[0] * lnglat_100[1] - m * lnglat_50[1]];
            point2 = [point1[0] + lnglat_50[0], point1[1] - lnglat_50[1]];
            break;
        case 25:
            var xy = XX[2].replace("[", "").replace("]", "")-1;
            var m = Math.floor(xy / 4);
            var n = xy % 4;
            point1 = [(XX[1] - 31) * lnglat_100[0] + n * lnglat_25[0], XX[0] * lnglat_100[1] - m * lnglat_25[1]];
            point2 = [point1[0] + lnglat_25[0], point1[1] - lnglat_25[1]];
            break;
        case 10:
            var xy = XX[2]-1;
            var m = Math.floor(xy / 12);
            var n = xy % 12;
            point1 = [(XX[1] - 31) * lnglat_100[0] + n * lnglat_10[0], XX[0] * lnglat_100[1] - m * lnglat_10[1]];
            point2 = [point1[0] + lnglat_10[0], point1[1] - lnglat_10[1]];
            break;
        case 5:
            var xy = XX[2]-1;
            var m = Math.floor(xy / 12);
            var n = xy % 12;
            var xy_5 = XX[3].replace("A", 0).replace("B", 1).replace("C", 2).replace("D", 3);
            var m_5 = Math.floor(xy_5 / 2);
            var n_5 = xy_5 % 2;
            point1 = [(XX[1] - 31) * lnglat_100[0] + n * lnglat_10[0] + n_5 * lnglat_5[0], XX[0] * lnglat_100[1] - m * lnglat_10[1] - m_5 * lnglat_5[1]];
            point2 = [point1[0] + lnglat_5[0], point1[1] - lnglat_5[1]];
            break;
        case 1:
            var xy = XX[2]-1;
            var m = Math.floor(xy / 12);
            var n = xy % 12;
            var xy_5 = XX[3].replace("A", 0).replace("B", 1).replace("C", 2).replace("D", 3);
            var m_5 = Math.floor(xy_5 / 2);
            var n_5 = xy_5 % 2;
            var xy_2 = XX[4] - 1;
            var m_2 = Math.floor(xy_2 / 2);
            var n_2 = xy_2 % 2;
            console.info(sheet);
            XX[5] = XX[5].toString().replace("(", "").replace(")", "")
            var xy_1 = XX[5] - 1;
            var m_1 = Math.floor(xy_1 / 2);
            var n_1 = xy_1 % 2;
            point1 = [(XX[1] - 31) * lnglat_100[0] + n * lnglat_10[0] + n_5 * lnglat_5[0] + n_2 * lnglat_2[0] + n_1 * lnglat_1[0],
                XX[0] * lnglat_100[1] - m * lnglat_10[1] - m_5 * lnglat_5[1] - m_2 * lnglat_2[1] - m_1 * lnglat_1[1]];
            point2 = [point1[0] + lnglat_1[0], point1[1] - lnglat_1[1]];
            break;
    }
    point1 = ol.proj.transform([point1[0], point1[1]], "EPSG:4326", "EPSG:3857");
    point2 = ol.proj.transform([point2[0], point2[1]], "EPSG:4326", "EPSG:3857");
    return [point1, point2];
}

/**
 * 根据经纬度获得图幅号
 * @param lnglat
 * @param scale
 * @returns {string}
 * @constructor
 */
function LngLat2Sheet(lnglat, scale) {
    var lng = lnglat[0];
    var lat = lnglat[1];
    if (lng > 0 && lat > 0) {
        switch (scale) {
            case 100:
                var n_100 = Math.floor(lng / lnglat_100[0]) + 31;
                var m_100 = Math.floor(lat / lnglat_100[1]) + 1;
                return fillzero(m_100, 2) + "-" + n_100;
                break;
            case 50:
                var n_100 = Math.floor(lng / lnglat_100[0]) + 31;
                var m_100 = Math.floor(lat / lnglat_100[1]) + 1;
                var n_50 = Math.floor((lng - (n_100 - 31) * lnglat_100[0]) / lnglat_50[0]);
                var m_50 = Math.floor((lat - (m_100 - 1) * lnglat_100[1]) / lnglat_50[1]);
                var value_50 = ((1 - m_50) * 2 + n_50);
                var value_50_str = value_50.toString().replace("0", "A").replace("1", "B").replace("2", "C").replace("3", "D");
                return fillzero(m_100, 2) + "-" + n_100 + "-" + value_50_str;
                break;
            case 25:
                var n_100 = Math.floor(lng / lnglat_100[0]) + 31;
                var m_100 = Math.floor(lat / lnglat_100[1]) + 1;
                var n_25 = Math.floor((lng - (n_100 - 31) * lnglat_100[0]) / lnglat_25[0]);
                var m_25 = Math.floor((lat - (m_100 - 1) * lnglat_100[1]) / lnglat_25[1]);
                var value_25 = ((3 - m_25) * 4 + n_25) + 1;
                var value_25_str = "[" + fillzero(value_25, 2) + "]";
                return fillzero(m_100, 2) + "-" + n_100 + "-" + value_25_str;
                break;
            case 10:
                var n_100 = Math.floor(lng / lnglat_100[0]) + 31;
                var m_100 = Math.floor(lat / lnglat_100[1]) + 1;
                var n_10 = Math.floor((lng - (n_100 - 31) * lnglat_100[0]) / lnglat_10[0]);
                var m_10 = Math.floor((lat - (m_100 - 1) * lnglat_100[1]) / lnglat_10[1]);
                var value_10 = ((11 - m_10) * 12 + n_10) + 1;
                var value_10_str = fillzero(value_10, 3);
                return fillzero(m_100, 2) + "-" + n_100 + "-" + value_10_str;
                break;
            case 5:
                var n_100 = Math.floor(lng / lnglat_100[0]) + 31;
                var m_100 = Math.floor(lat / lnglat_100[1]) + 1;
                var n_10 = Math.floor((lng - (n_100 - 31) * lnglat_100[0]) / lnglat_10[0]);
                var m_10 = Math.floor((lat - (m_100 - 1) * lnglat_100[1]) / lnglat_10[1]);
                var value_10 = ((11 - m_10) * 12 + n_10) + 1;
                var value_10_str = fillzero(value_10, 3);
                var n_5 = Math.floor(((lng - (n_100 - 31) * lnglat_100[0]) - n_10 * lnglat_10[0]) / lnglat_5[0]);
                var m_5 = Math.floor(((lat - (m_100 - 1) * lnglat_100[1]) - m_10 * lnglat_10[1]) / lnglat_5[1]);
                var value_5 = ((1 - m_5) * 2 + n_5);
                var value_50_str = value_5.toString().replace("0", "A").replace("1", "B").replace("2", "C").replace("3", "D");
                return fillzero(m_100, 2) + "-" + n_100 + "-" + value_10_str + "-" + value_50_str;
                break;
            case 1:
                var n_100 = Math.floor(lng / lnglat_100[0]) + 31;
                var m_100 = Math.floor(lat / lnglat_100[1]) + 1;
                var n_10 = Math.floor((lng - (n_100 - 31) * lnglat_100[0]) / lnglat_10[0]);
                var m_10 = Math.floor((lat - (m_100 - 1) * lnglat_100[1]) / lnglat_10[1]);
                var value_10 = ((11 - m_10) * 12 + n_10) + 1;
                var value_10_str = fillzero(value_10, 3);
                var n_5_all = ((lng - (n_100 - 31) * lnglat_100[0]) - n_10 * lnglat_10[0]);
                var m_5_all = ((lat - (m_100 - 1) * lnglat_100[1]) - m_10 * lnglat_10[1]);
                var n_5 = Math.floor(n_5_all / lnglat_5[0]);
                var m_5 = Math.floor(m_5_all / lnglat_5[1]);
                var value_5 = ((1 - m_5) * 2 + n_5);
                var value_5_str = value_5.toString().replace("0", "A").replace("1", "B").replace("2", "C").replace("3", "D");
                var n_2 = Math.floor((n_5_all - n_5 * lnglat_5[0]) / lnglat_2[0]);
                var m_2 = Math.floor((m_5_all - m_5 * lnglat_5[1]) / lnglat_2[1]);
                var value_2 = ((1 - m_2) * 2 + n_2) + 1;
                var n_1 = Math.floor(((n_5_all - n_5 * lnglat_5[0]) - n_2 * lnglat_2[0]) / lnglat_1[0]);
                var m_1 = Math.floor(((m_5_all - m_5 * lnglat_5[1]) - m_2 * lnglat_2[1]) / lnglat_1[1]);
                var value_1 = ((1 - m_1) * 2 + n_1) + 1
                var value_1_str = "(" + value_1 + ")";
                return fillzero(m_100, 2) + "-" + n_100 + "-" + value_10_str + "-" + value_5_str + "-" + value_2 + "-" + value_1_str;
                break;

        }
    }
}

/***
 * 根据图幅号获得比例尺
 * @param sheet
 * @constructor
 */
function Sheet2scale(sheet) {
    var s=sheet.split("-");
    switch (s.length) {
        case 2:
            return 100;
            break;
        case 3:
            var ss=s[2];
            if (ss.match(/[ABCDabcd]/))
                return 50;
            else if (ss.match(/[\[]/))
                return 25;
            else
                return 10;
            break;
        case 4:
            return 5;
            break;
        case 6:
            return 1;
            break;
    }

}

/***
 * 补零
 * @param value
 * @param num
 * @returns {string}
 */
function fillzero(value, num) {
    var re = value;
    var length = value.toString().length;
    for (var i = 0; i < num - length; i++) {
        re = "0" + re;
    }
    return re;
}